/**
 * 获取当前时间，支持自定义格式
 * @param {string} format 时间格式，默认 'YYYY-MM-DD HH:MM:SS'
 * @returns {string} 格式化后的时间字符串
 */
export function getCurrentTime(format = 'YYYY-MM-DD HH:MM:SS') {
  const date = new Date();
  const year = date.getFullYear();
  const month = padZero(date.getMonth() + 1);
  const day = padZero(date.getDate());
  const hour = padZero(date.getHours());
  const minute = padZero(date.getMinutes());
  const second = padZero(date.getSeconds());

  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hour)
    .replace('MM', minute)
    .replace('SS', second);
}

/**
 * 计算两个时间的差值（结束时间 - 开始时间）
 * @param {string} startTime 开始时间，格式需与 'YYYY-MM-DD HH:MM:SS' 兼容
 * @param {string} endTime 结束时间，默认使用当前时间
 * @returns {Object} 包含天、时、分、秒的差值对象，新增直接可用的 hhmmss 格式
 */
export function getTimeDifference(startTime, endTime = getCurrentTime()) {
  // 将时间字符串转为时间戳（毫秒）
  const startTimestamp = new Date(startTime).getTime();
  const endTimestamp = new Date(endTime).getTime();

  // 计算毫秒差（确保为正数）
  const diffMs = Math.abs(endTimestamp - startTimestamp);

  // 转换为天、时、分、秒
  const totalSeconds = Math.floor(diffMs / 1000);
  const days = Math.floor(totalSeconds / (24 * 60 * 60));
  const hours = Math.floor((totalSeconds % (24 * 60 * 60)) / (60 * 60));
  const minutes = Math.floor((totalSeconds % (60 * 60)) / 60);
  const seconds = totalSeconds % 60;

  // 拼接成 HH:mm:ss 格式
  const hhmmss = `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;

  return {
    days,
    formatted: `${days > 0 ? `${days}天` : ''}${hours > 0 ? `${hours}时` : ''}${minutes > 0 ? `${minutes}分` : ''}${seconds}秒`,
    hhmmss, // 直接返回拼接好的 HH:mm:ss 格式
    hours,
    minutes,
    seconds
  };
}

/**
 * 数字补零
 * @param {number} num 需处理的数字
 * @returns {string} 补零后的字符串
 */
function padZero(num) {
  return num < 10 ? `0${num}` : num.toString();
}